本文將介紹LINQPad的基本使用情境。
同步發表於個人點部落 - [鐵人賽Day28] ASP.Net Core MVC 進化之路 - 工具篇(2) / LINQPad神器
(圖片來源:https://www.linqpad.net/)
LINQ(Language Integrate Query)
為C#特有的一種整合式查詢語法,
內容大量使用委派(delegate)機制達到操作簡潔的效果。
可解決各資料來源查詢方式不一的問題,
關於LINQ的部份本篇不會介紹太多,
有需要的讀者請參考其他網路上的文件。
而LINQPad
是一位微軟 MVP 所開發微軟釋出的免費工具,
提供使用LINQ查詢語法與資料庫互動的介面,
讓初學LINQ的人可以「還不熟C#就先學LINQ
」。
講了落落長我們先到官網下載工具,
官方有提供免費版及付費版,
免費版本中必須什麼都自己Hand Code,
在付費版中有提供NuGet
及Intellisense
等功能,
其餘功能差異如下表。
下載完畢後請執行安裝(略),
安裝完畢後請打開LINQPad,
在開始之前請先準備一個練習用的資料庫,
筆者下面會使用localdb中的Northwind進行操作,
打開後請先點選左上方的Add connection
。
開啟後點選上方的Default(LINQ to SQL)
,
接下來的頁面會請你設定資料庫的連接位置,
如果你有MDF資料檔也可以掛上去當作測試DB,
下方的選項會決定你的Table、Property命名的單複數,
也可載入資料庫的預存程序(Store Procedure),
填入相關資訊之後按OK
繼續。
載入之後會看到跟資料庫很像的Table結構,
但其實它是幫你使用ORM生成裝載資料的類別(只是你看不到)。
點選Table右鍵有許多預設的方式可供使用,
基本上功能相當完整,
就跟使用SSMS(SQL Server Management Studio)一樣。
接著介紹右上方Language
部分,
LINQPad支援**C#、VB、F#**三種語言及原生SQL語法
,
筆者僅針對C#部分作介紹。
以下針對三種模式及使用情境作介紹。
僅能使用單行表達式,通常會在練習LINQ或查詢簡單條件資料的時候使用。
[情境] 查詢資料庫中生日(BirthDate)大於1960年1月1日的員工(Employees)資訊
這邊要特別介紹一個很好用的地方,
當你的資料表之間有建立關聯時,
它會幫你將有關聯到的資料包裝成超連結的形式,
透過點選超連結即可快速查看有關聯的資料
,
光這點我就已經愛不釋手了!
執行結果如下圖。
點選後會展開對應的關聯資料。
當查詢條件比較複雜時可以改用Statement(s)
的陳述方式,
這邊可以允許輸入多行的程式碼
進行運算,
但不能使用自訂類別及方法。
[情境]:查詢員工中FirstName為Michael者(簡單字串拆解)
這邊我們可以撰寫多行的程式碼,
筆者個人覺得對初學者練習
上很有幫助!
除了資料觀看方便以外,
可以練習盲打
的功力(是好處也是壞處XD),
而且不用建立一堆練習用的Console App!
但這邊要使用Dump()
將想呈現的資料印出來,
有點類似Console.WriteLine()
的概念。
這個功能看似平凡無奇,
但在部分老舊
或開發中
的系統,
針對「無法完善
」或「尚未完善
」的功能,
你可以直接使用LINQPad當作簡單的後台操作。
例如我可以針對考試系統的某個科目,
以某個公式調整所有的同學的成績,
諸如此類等等!
雖然Statement
的功能相當實用,
但我偶爾還是會用到Program
的部分,
因為在這邊我可以自訂方法
及類別
,
例如在撰寫ViewModel的組合及資料處理會在Services層中進行,
當一段與資料互動的邏輯寫的不夠清楚時,
我會使用LINQPad
幫助我從資料結果中發現錯誤,
基本操作如下圖。
以下示範將多張Table組成ViewModel的方式。
最後補充一下,
LINQ雖然是一種很方便的查詢語法,
但使用方式錯誤會導致系統速度嚴重被拖垮,
在LINQPad
中可以觀察你所下的LINQ
轉換成的SQL語法
,
在查找效能瓶頸
時很有幫助。
有關LINQPad的基礎使用就介紹到這邊,
不要再把這麼強的工具當練習品看待了!